package org.example.c_0_011;

import java.util.concurrent.*;

public class T_ThreadPoolExecutor {
    public static void main(String[] args) {
        /**
         * 七个参数
         * 1、corePoolSize 核心线程数
         * 2、maximumPoolSize 最大线程数
         * 3、keepAliveTime 非核心线程数最大等待时间，超过就归还线程给操作系统
         * 4、unit 时间单位
         * 5、workQueue 工作队列，当核心线程都被占用时其余任务放在这里，当工作队列满了后，线程池才会开辟新的线程去处理任务。
         * 6、threadFactory 线程工厂，创建线程的策略，实际生产必须自定义，目的：赋予线程有意义的线程名称
         * 7、handler 当线程池线程全都被占用，且工作队列也满了的时候的处理策略，生产中往往会将任务持久化到Kafka等中间件，然后做好日志去处理。
         */
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 4,
                60, TimeUnit.SECONDS,
                new LinkedBlockingQueue<Runnable>(),
                Executors.defaultThreadFactory(),
                new ThreadPoolExecutor.DiscardOldestPolicy());
    }
}
